.TH std::experimental::clamp 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::experimental::clamp \- std::experimental::clamp

.SH Synopsis
   Defined in header <experimental/simd>
   template< class T, class Abi >

   simd<T, Abi>                                                     (parallelism TS v2)

   clamp( const simd<T, Abi>& v, const simd<T, Abi>& lo, const
   simd<T, Abi>& hi );

.SH Parameters

   v      - the elements to clamp
   lo, hi - the boundaries to clamp v to

.SH Return value

   The result of element-wise application of std::clamp(v[i], lo[i], hi[i]) for all i ∈
   [0, size()).

.SH Example


// Run this code

 #include <cstddef>
 #include <cstdint>
 #include <experimental/simd>
 #include <iomanip>
 #include <iostream>
 namespace stdx = std::experimental;

 void println(auto rem, auto const v)
 {
     std::cout << rem << ": ";
     for (std::size_t i = 0; i != v.size(); ++i)
         std::cout << std::setw(4) << v[i] << ' ';
     std::cout << '\\n';
 }

 int main()
 {
     stdx::fixed_size_simd<int, 8> a{[](int i) {
         static constexpr auto c = {-129, -128, -1, 0, 42, 127, 128, 255};
         return c.begin()[i];
     }};
     println("a", a);

     stdx::fixed_size_simd<int, 8> lo1{INT8_MIN};
     stdx::fixed_size_simd<int, 8> hi1{INT8_MAX};
     const auto b = stdx::clamp(a, lo1, hi1);
     println("b", b);

     stdx::fixed_size_simd<int, 8> lo2{0};
     stdx::fixed_size_simd<int, 8> hi2{UINT8_MAX};
     const auto c = stdx::clamp(a, lo2, hi2);
     println("c", c);
 }

.SH Output:

 a: -129 -128   -1    0   42  127  128  255
 b: -128 -128   -1    0   42  127  127  127
 c:    0    0    0    0   42  127  128  255

.SH See also

   clamp   clamps a value between a pair of boundary values
   \fI(C++17)\fP \fI(function template)\fP
